#pragma once

#include <qstring.h>
#include <functional>

// 体素的特征（宽、高、半径）或操作的特征（倒角的半径）
// Feature的生成与expression有关，应在GenerateExpressions时生成
class Feature
{
	friend class Expression;
	friend class ExpressionManager;

public:
	Feature(QString key, QString content, float* GetModifyValue);

	QString GetKey() const
	{
        return m_key;
	}

	float& GetValue()
	{
		return *m_GetModifyValue;
	}

	void setModifyOperation(const std::function<void()>& op) 
	{
		m_modifyOperation = op;
	}

	static int featureCount;

private:
	// feature 的 key，每一个feature 都有一个唯一的 key
	QString m_key;
	// 具体内容（解释特征值）
	QString m_content;

	// 获得特征值修改对象的地址
	float* m_GetModifyValue = nullptr;

	// 修改特征需要附加的操作（create shape还要改变Topo_shape）
    std::function<void()> m_modifyOperation;
};

